import os
from datetime import datetime

# -------------------------- 简单配置（按需修改）--------------------------
ROOT_DIR = "./"                  # 遍历的根目录（默认当前目录，可改为如 D:/all_projects）
OUTPUT_FILE = "MERGED_README.md" # 输出的合并文档
# 忽略的无用目录（可按需添加/删除）
IGNORE_DIRS = {"node_modules", ".git", "dist", "build", ".idea", ".vscode", "test"}
# --------------------------------------------------------------------------

def find_all_readmes(root_dir):
    """递归查找所有多级目录下的 README.md（忽略大小写和指定目录）"""
    readme_files = []
    # 遍历所有目录（包括子目录）
    for current_dir, dirs, files in os.walk(root_dir):
        # 跳过忽略目录（修改dirs列表实现原地过滤）
        dirs[:] = [d for d in dirs if d not in IGNORE_DIRS]
        
        # 查找当前目录下的 README.md（不区分大小写）
        for file in files:
            if file == "README.md":
                # 获取文件绝对路径和相对路径（相对于脚本运行目录）
                abs_path = os.path.abspath(os.path.join(current_dir, file))
                rel_path = os.path.relpath(abs_path, start=os.getcwd())
                # 获取项目名称（文件所在的最后一级目录名）
                project_name = os.path.basename(current_dir)
                readme_files.append((project_name, rel_path, abs_path))
    return readme_files

def main():
    print("🔍 开始查找所有 README.md 文件（多级目录）...")
    
    # 查找所有符合条件的 README.md
    readme_list = find_all_readmes(ROOT_DIR)
    
    # 检查是否找到文件
    if not readme_list:
        print("❌ 未找到任何 README.md 文件！")
        return
    
    print(f"✅ 找到 {len(readme_list)} 个文件，开始合并...")

    # 生成合并文档的头部信息
    header = [
        "---",
        f"\n更新时间：{datetime.now().strftime('%Y-%m-%d')}",
        "---",
    ]
    
    # 逐个拼接文件内容（标注来源 + 原内容）
    merged_content = header
    for idx, (proj_name, rel_path, abs_path) in enumerate(readme_list, 1):
        # 读取并追加原文件内容（UTF-8 编码，兼容中文和特殊字符）
        try:
            with open(abs_path, "r", encoding="utf-8") as f:
                merged_content.append(f.read())
            merged_content.append("\n\n")  # 每个文件后留空分隔
        except Exception as e:
            print(f"⚠️  读取文件 {rel_path} 失败：{str(e)}")
            merged_content.append(f"\n⚠️  该文件读取失败：{str(e)}\n\n")
    
    # 写入合并文档（UTF-8 编码，避免乱码）
    with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
        f.write("\n".join(merged_content))
    
    # 输出结果提示
    output_abs_path = os.path.abspath(OUTPUT_FILE)
    print(f"\n🎉 合并完成！")
    print(f"📄 输出文件路径：{output_abs_path}")
    print(f"📊 合并统计：成功 {len(readme_list)} 个文件")

if __name__ == "__main__":
    main()